Monte Carlo Simulation

Clewlow and Strickland Chapter 4
DATA 5695/6695

Tyler J. Brough

2025-02-25

Clewlow and Strickland: Chapter 4 Monte Carlo Simulation

Valuation by Simulation


  • We have previously shown that the value of an option is the risk-neutral expectation of its discounted payoff

  • In the binomial model this was seen in the single-period model

\[ C_{0} = e^{-rh}\left[p^{\ast} C_{u} + (1 - p^{\ast})C_{d}\right] \]

  • The term inside the brackets is the binomial expected value under the risk-neutral distribution

  • This suggests a path forward for models beyond the binomial model

  • We can obtain an estimate of the risk-neutral expected value by computing the average of a large number of discounted payoffs

  • This is a LLN argument based on frequentist reasoning

Valuation by Simulation (cont’d)

  • Consider an European call option that pays \(C_{T}\) at expiry.

  • First, we simulate the risk-neutral process of the state variables from their observed values today

  • Second, apply the payoff function to the terminal values simulated along each path and obtain \(C_{T,j}\) for path \(j\)

  • Then discount this payoff (assuming a constant risk-free rate):

\[ C_{0,j} = e^{-rT} C_{T,j} \]

  • Repeat this \(M\) times and obtain:

\[ \hat{C}_{0} = \frac{1}{M} \sum\limits_{j=1}^{M} C_{0,j} \]

Valuation by Simulation (cont’d)


  • This is basically a proposal to evaluate the expectation statistically using Monte Carlo integration

  • There will thus be sampling error introduced in the algorithm and we can estimate it via the standard error of the simulation

\[ SE(\hat{C}_{0}) = \frac{SD(C_{0,j})}{\sqrt{M}} \]

The standard deviation is given by:

\[ \mathrm{SD}\left(C_{0,j}\right) = \left(\frac{1}{M-1} \sum_{j=1}^M\left(C_{0,j} - \hat{C}_0\right)^2\right)^{\frac{1}{2}} \]

Simulating Brownian Motion


We need to simulate the geometric Brownian motion (GBM) process, which is:

\[ dS_{t} = (r - \delta)S_{t} dt + \sigma S_{t} dz_{t} \]

One of the most efficient ways to simualte this is by taking the natural logarithm of the variable that follows the GBM process:

\[ dx_{t} = \nu dt + \sigma d_{z}, \quad \quad \nu = r - \delta - \frac{1}{2} \sigma^{2} \]

where \(x_{t} = \ln{(S_{t})}\)

Simulating Brownian Motion (cont’d)


We can discretize this continuous process by changing the infinitesimals \(dx\), \(dt\), and \(dz\) into smal change \(\Delta x\), \(\Delta t\), and \(\Delta z\)

\[ \Delta x = \nu \Delta t + \sigma \Delta z \]

This actually involves no approximation as in this case it is actually the solution to the stochastic differential equation (SDE) which can be written:

\[ x_{t + \Delta t} = x_{t} + \nu \Delta t + \sigma(z_{t + \Delta t} - z_{t}) \]

In terms of the asset price \(S\) we have

\[ S_{t + \Delta t} = S_{t} \exp{(\nu \Delta t + \sigma (z_{t + \Delta t} - z_{t}))} \]

Simulating Brownian Motion (cont’d)

import numpy as np
import matplotlib.pyplot as plt

def asset_paths(S: float, mu: float, sigma: float, div: float, T: int, n_reps: int, n_steps: int) -> np.ndarray:
  dt = T / n_steps
  nudt = (mu - div - 0.5*sigma*sigma)*dt
  sidt = sigma*np.sqrt(dt)
  z = nudt + sidt*np.random.normal(size=(n_reps, n_steps))
  paths = np.cumsum(np.concatenate((np.full((n_reps, 1), np.log(S)), z), axis=1), axis=1)

  return np.exp(paths)

n_reps, n_steps = 10, 100
paths = asset_paths(100.0, 0.06, 0.20, 0.03, 1, n_reps, n_steps)